位置参数:必须按照顺序准确传递,如果数量和顺序不对,就会可能造成程序错误;调用函数时候,如果写了参数名称,那么位置就不重要了。
默认参数:在参数申明的时候跟一个用于默认值的赋值语句,如果调用函数的时候没有给出值,那么这个赋值语句就执行。
注意:所有必须的参数要在默认参数之前
默认参数的好处:
可变长度的参数,分为不提供关键字和提供关键字两种模式,分别为元组 tuple 和字典 dict。
可变长度的参数,如果是提供关键字,就是字典 dict,需要提供 key – value。
将字典作为参数传递的时候,可以直接传一个字典变量,也可以在参数列表中写明 key 和 value。
函数参数小结
In [17]:
    
# 函数默认参数
def cal_0(money, rate=0.1):
    return money + money * rate 
print(cal_0(100))
print(cal_0(100,0.2))
print(cal_0(rate=0.3,money=100))
    
    
In [25]:
    
# 函数默认参数
def cal_1(money, bonus=1000, month=12,a=1,b=2):
    i = money * month + bonus 
    return i
print(cal_1(5000))
print(cal_1(5000, 2000))
print(cal_1(5000, 2000, 10))
    
    
In [ ]:
    
# 画一个三角形 ,n=高度
'''
       *
      ***
     *****
    *******
   *********
  ***********
 *************
'''
    
In [22]:
    
# 函数默认参数
def draw_triangle(n=5):
    for i in range(n+1):
        print(' '*(n-i),'*'*(2*i-1))
        
draw_triangle(3)
#draw_triangle()
    
    
In [24]:
    
# 函数可变长度的参数 元组
def cal_2(kind, *numbers):
    if kind == 'avg':
        n = 0
        for i in numbers:
            n = n + i
        return n / len(numbers)
print(cal_2('avg', 1,2,3,4))
    
    
In [25]:
    
# 函数可变长度的参数 元组
# 输入类别,输入要计算的数字
def cal_3(kind, *numbers):
    
    if kind == 'avg':
        n = 0
        for i in numbers:
            n = n + i
        return n / len(numbers)
    if kind == 'sum':
        n = 0
        for i in numbers:
            n = n + i
        return n
    
print(cal_3('avg', 1,2,3,4))
print(cal_3('sum', 1,2,3,4))
# 如果已经有一个list或者tuple,要调用一个可变参数怎么办?
# 在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:
print(cal_3('sum',*[1,2,3,4]))
    
    
In [12]:
    
# 函数可变长度的参数 元组
# 简化程序逻辑
def cal_4(kind, *numbers):
    
    n = 0
    for i in numbers:
        n = n + i
    
    if kind == 'avg':
        return n / len(numbers)
    if kind == 'sum':
        return n
    
print(cal_4(kind='avg', 1,2,3,4))
print(cal_4('sum', 1,2,3,4))
    
    
In [13]:
    
# 传递元组和字典参数的最合适写法
def cal_5(*numbers, **kw):
    
    # 判断是否有 kind 这个 key
    if 'kind' in kw:
        kind_value = kw.get('kind')
    
    n = 0
    for i in numbers:
        n = n + i
        
    if kind_value == 'avg':
        return n / len(numbers)
    if kind_value == 'sum':
        return n
    
print(cal_5(1,2,3,4,kind='avg',max='ignore'))
    
    
In [ ]:
    
# 等价的函数一般写法和匿名函数写法
def add(x, y):
    return x + y
lambda x, y: x + y
    
In [9]:
    
a =  lambda x, y=2 : x + y 
a(3)
    
    Out[9]:
In [10]:
    
a(3, 5)
    
    Out[10]:
In [11]:
    
a = lambda x : x * x +40
print(a(2))
    
    
In [ ]:
    
# 举例
# 猜数,机器猜
min = 0
max = 1000
guess_ok_mark = False
while not guess_ok_mark:
    cur_guess = int((min + max) / 2)
    print('I guess:', cur_guess)
    human_answer = input('Please tell me big or small:')
    if human_answer == 'big':
        max = cur_guess
    if human_answer == 'small':
        min = cur_guess
    if human_answer == 'ok':
        print('HAHAHA')
        guess_ok_mark = True
    
思考一下
*
In [1]:
    
def func(number):
    b = []
    for i in range(1,number+1):
        if number % i == 0:
            print(i)
            b.append(i)
    return b
    
In [2]:
    
print(func(10))
    
    
In [4]:
    
# 找到最大数 #1
def find_max(l):
    
    # max = float('-inf') 表示负无穷大
    max = float('-inf')
    for x in l:
        if x > max:
            max = x
    return max
print(find_max([-20,1,6,7,20,5]))
print(find_max([-20,-3,-6,-7,-5]))
    
    
In [5]:
    
# 找到最大数 #2
# 使用递归
def find_max(l):
    if len(l) == 1:
        return l[0]
    v1 = l[0]
    v2 = find_max(l[1:])
    if v1 > v2:
        return v1
    else:
        return v2
print(find_max([1,6,7,20,5]))
    
    
In [3]:
    
# kind 中 增加 max key, 
# max = ingnore, 则忽略最大值
def cal_6(*numbers, **kind):
    
    if 'kind' in kind:
        kind_value = kind.get('kind')
        
    if 'max' in kind:
        if kind.get('max') == 'ignore':
            numbers = list(numbers)
            numbers.remove(max(numbers))
    
    n = 0
    for i in numbers:
        n = n + i
        
    if kind_value == 'avg':
        return n / len(numbers)
    if kind_value == 'sum':
        return n
    
print(cal_6(1,2,3,4, kind='avg', max='ignore',min='ignore'))
print(cal_6(1,2,3,4, kind='avg'))
print(cal_6(1,2,3,4, kind='sum'))
    
    
In [4]:
    
# kind 中 增加 min key,
# min key = double, 则最小值计算两次
def cal_7(*numbers, **kw):
    
    numbers = list(numbers)
    
    if 'kind' in kw:
        kind_value = kw.get('kind')
        
    if 'max' in kw:
        if kw.get('max') == 'ignore':
            numbers.remove(max(numbers))
    if 'min' in kw:
        if kw.get('min') == 'double':
            numbers.append(min(numbers))
            
    n = 0
    for i in numbers:
        n = n + i
        
    if kind_value == 'avg':
        return n / len(numbers)
    if kind_value == 'sum':
        return n
    
print(cal_7(1,2,3,4, kind='avg', max='ignore', min='double'))
print(cal_7(1,2,3,4, kind='avg'))
print(cal_7(1,2,3,4, kind='sum'))
    
    
In [ ]: